
package com.jf.cloud.supplier.service;

import com.jf.cloud.api.multishop.bo.OrderChangeShopWalletAmountBO;
import com.jf.cloud.api.supplier.bo.SupplierWalletBO;
import com.jf.cloud.common.database.dto.PageDTO;
import com.jf.cloud.common.database.vo.PageVO;
import com.jf.cloud.common.order.vo.OrderSimpleAmountInfoBO;
import com.jf.cloud.supplier.dto.SupplierWalletLogSearchDTO;
import com.jf.cloud.supplier.model.SupplierWallet;
import com.jf.cloud.supplier.vo.SupplierWalletVO;

import java.util.List;

/**
 * 供应商钱包信息
 *
 * @author zz
 * @date 2022-03-14 17:04:32
 */
public interface SupplierWalletService {

    /**
     * 分页获取商家钱包信息列表
     * @param pageDTO 分页参数
     * @return 商家钱包信息列表分页数据
     */
    PageVO<SupplierWallet> page(PageDTO pageDTO);

    /**
     * 根据商家钱包信息id获取商家钱包信息
     *
     * @param supplierWalletId 商家钱包信息id
     * @return 商家钱包信息
     */
    SupplierWallet getBySupplierWalletId(Long supplierWalletId);

    /**
     * 保存商家钱包信息
     * @param supplierWallet 商家钱包信息
     */
    void save(SupplierWallet supplierWallet);

    /**
     * 更新商家钱包信息
     * @param supplierWallet 商家钱包信息
     */
    void update(SupplierWallet supplierWallet);

    /**
     * 通过下单添加商家待结算金额，确认收货后进行结算
     * @param orderSimpleAmountInfos 订单id和店铺id关联信息
     */
    void addAmountByOrder(List<OrderSimpleAmountInfoBO> orderSimpleAmountInfos);

    /**
     * 结算给商家增加结算金额
     * @param orderId 订单id
     */
    void addAmountBySettledOrder(Long orderId);

//    /**
//     * 通过退款，减少商家钱包金额
//     * @param refundId
//     * @return
//     */
//    void subSupplierAmountByRefund(Long refundId);

    /**
     * 通过退款，锁定商家钱包金额
     * @param orderChangeShopWalletAmountBO 金额相关信息
     * @return
     */
    void refundSupplierAmountByRefund(OrderChangeShopWalletAmountBO orderChangeShopWalletAmountBO);

//    /**
//     * 解锁店铺钱包
//     * @param refundId
//     */
//    void unlockSupplierAmountByRefund(Long refundId);

    /**
     * 根据店铺id查询店铺钱包信息
     * @param supplierId 店铺id
     * @return 店铺钱包信息
     */
    SupplierWalletVO getBySupplierId(Long supplierId);

    /**
     * 获取所有店铺的钱包信息
     * @param supplierWalletLogSearchDTO
     * @return 钱包信息
     */
    SupplierWalletVO getAllSupplier(SupplierWalletLogSearchDTO supplierWalletLogSearchDTO);

    /**
     * 订单部分退款导致订单关闭 商家结算操作
     * @param orderChangeSupplierWalletAmountBO 金额相关信息
     */
    void settlementSupplierAmountByRefund(OrderChangeShopWalletAmountBO orderChangeSupplierWalletAmountBO);

    /**
     * 修改店铺钱包的待结算金额
     * @param message 分销产生的待结算金额
     */
    void updateByDistributionAmount(List<SupplierWalletBO> message);

    /**
     * 分页获取供应商钱包信息
     * @param pageDTO
     * @param supplierWalletLogSearchDTO
     * @return
     */
    PageVO<SupplierWalletVO> pageSupplierWalletByTime(PageDTO pageDTO, SupplierWalletLogSearchDTO supplierWalletLogSearchDTO);
}
